07 - Optyka i działanie kamer
Wprowadzenie do przetwarzania obrazów
Politechnika Poznańska, Instytut Robotyki i Inteligencji Maszynowej
Ćwiczenie laboratoryjne 7: optyka kamery oraz jej kalibracja
Powrót do spisu treści ćwiczeń laboratoryjnych
Wstęp
Podczas tego laboratorium poznasz fizyczne i optyczne cechy kamery USB. Dowiesz się, jak zmiana obiektywu wpływa na kąty widzenia kamery i jej ogniskową oraz jak manipulacja przesłoną wpływa na głębie ostrości i szybkość akwizycji obrazu. W kolejnym podrozdziale przeprowadzisz kalibrację kamery.
Dane
Pobierz paczkę ze skryptami do zadań.
Obiektywy
Źródło: Obiektywy w systemach telewizji dozorowej.
Zbadaj jak zmienia się obraz kamery przy zmianie ogniskowej jej obiektywu. Odpowiedz na pytania: * Jaką charakterystykę obrazu tracimy zwiększając ogniskową soczewki a jaką zyskujemy? * W jakich sytuacjach korzystne jest posiadanie bardzo szerokiego kąta widzenia?
Przysłona
Przysłona ma za zadanie ograniczać ilość światła wpadającego do obiektywu, a tym samym zapobiegać „prześwietlaniu” powstającego w kamerze obrazu. Regulując przesłonę, kontrolujemy ilość światła przechodzącego przez soczewki obiektywu. Jednocześnie wpływamy na głębie ostrości otrzymanego obrazu, ponieważ wyższa wartość przesłony powoduje wyższą głębię ostrości.
Zadanie
Uruchom skrypt scripts/07/shutter.py
. Korzystając z pokrętła zmiany przesłony na kamerze (pierścień bez śruby), ustaw odpowiednią ilość wpadającego światła. Sprawdź, jak wpływa na obraz dodatkowe oświetlenie (możesz wykorzystać latarkę w telefonie), a jak jego niedobór.
Następnie zminiejszaj delikatnie rozwarcie soczewki i jednocześnie obserwuj liczbę klatek na sekundę. Zastanów się, skąd może wynikać taka zmiana?
Kalibracja kamery
Rejestratory obrazu mogą posiadać wady i niedoskonałości fabryczne, które sprawiają, że obraz jest zniekształcony. Najczęściej widocznym zniekształceniem jest efekt rybiego oka, który sprawia, że linie proste nie leżą w jednej linii. Efekt ten można zredukować, znajdując parametry wewnętrzne kamery, co nazywamy kalibracją.
Aby skutecznie przeprowadzić kalibrację kamery, potrzebny jest obiekt o znanych kształtach i rozmiarach. Najczęściej jest to jednak tablica z naniesioną szachownicą. W naszym przypadku jest to szachownica 8x5, gdyż liczymy wewnętrzne narożniki.
Znany wzorzec jest wielokrotnie rejestrowany, z możliwie różnych kątów oraz pozycji kamery, zwłaszcza na skrajnych częściach obrazu. Pozwoli to zróżnicować dane i dobrać najlepsze dopasowanie.
Jak liczyć wielkość macierzy kalibracyjnej?
W przypadku tarczy kalibracyjnej typu szachownica, liczbę kolumn i wierszy wyznacza się licząc miejsca styczne narożników czarnych kwadratów. W naszym przypadku jest to 8x5.
W przypadku tarczy kalibracyjnej typu koło, jest to delikatnie bardziej skomplikowane. Liczbę kolumn wyznacza się licząc liczbę kół w pierwszych dwóch rzędach. Natomiast w przypadku wierszy, bierzemy pod uwagę tylko liczbę kół w jednej kolumnie. W naszym przypadku jest to 9x3.
Zadanie
Wykorzystaj skrypt scripts/07/calibration/1_collect_images.py
do zebrania zbioru kalibracyjnego. Program został tak napisany, żeby po wciśnięciu klawisza spacja
, zapisać obecną klatkę do katalogu frames
. Zbierz między 40 a 80 zdjęć, postaraj się, by były one zróżnicowane i ostre. Klawisz q
pozwoli zakończyń program.
Uruchom skypt scripts/07/calibration/2_find_chessboard.py
. Wyszuka on na każdym obrazie punkty charakterystyczne szachownicy oraz zwizualizuje. Następnie rozpocząnie się kalibracja (może potrwać to kilka minut przy większej liczbie zdjęć). Po prawidłowej kalibracji algorytm wypisze w terminalu parametry wewnętrzne kamery. Zachowaj je.
Uwaga: Optyka kamery powinna pozostać niezmieniona w trakcie zbierania zdjęć oraz po przeprowadzeniu procesu kalibracji. Każdorazowa zmiana parametrów wymaga zebrania nowego zestawu zdjęć oraz wykonania ponownej kalibracji.
Uzupełnij w skrypcie scripts/07/calibration/3_show_calibrated_camera.py
słownik cfg
korzystając z obliczonych parametrów wewnętrznych kamery. Uruchom skypt i korzystając z klawisza spacja
zmień tryby wyświetlania. Czy obraz został w widoczny sposób poprawiony? Sprawdź czy zmiana głębi oraz zoomu w kamerze wymaga jej ponownej kalibracji.
Efekt przedstawiono na filmie.
Obraz pseudo-3D
Kalibracja kamery pozwala na wykorzystanie narzędzi wprowadzających pseudo obraz 3D, który jest podstawą rozszerzonej rzeczywistości (ang. augmented reality, AR). Prostym narzędziem wykorzystywanym w robotyce są kody aruco, do których są wbudowane w opencv metody ich detekcji, lokalizacji oraz deskrypcji. Przykładowe zastosowania przedstawiono tutaj, tutaj, tutaj i tutaj.
Zadanie
Upewnij się, że w swoim środowisku masz zainstalowaną bibliotekę opencv-contrib-python
.
Wykorzystaj skrypt aruco_ar.py
by wyświetlić modele sześcianów nałożonych na kody aruco. Twoim zadaniem jest wykorzystać informację o id wykrytego znacznika aruco_id
oraz pokolorować boxa na różne kolory aruco_color
.
Opcjonalnie
Pobierz na telefon plik pdf (lub kilka) z kodem Aruco i sprawdź ich działanie. Zastanów się, jakie widzisz zastosowanie w robotyce a jakie w automatyce? Przykładowy rezultat przedstawiono na filmie.
- pdf z Aruco tagiem o id-0
- pdf z Aruco tagiem o id-1
- pdf z Aruco tagiem o id-2
- pdf z Aruco tagiem o id-3
Sklejanie obrazów (panorama)
W opencv został zaimplementowany algorytm, który pozwala na dopasowanie wielu obrazów do siebie. Jest to klasa cv2.Stitcher_create
, która wykonuje dla zdjęć następujące kroki: - wykrywa punkty charakterystyczne na obrazie i używa deskryptorów do ich opsu, - dopasowuje te punkty między obrazami na podstawie podobieństwa, - wykorzystuje dopasowane punkty oraz algorytm RANSAC do wyliczania macierzy przekształceń dla obrazów, by móc je dopasować do siebie - wykonuje sklejenie obrazów na podstawie macierzy przekształceń.
Więcej informacji o tym mechaniźmie można znaleźć w tym artykule.
Zadanie
Korzystając ze skrytpu image_stitching.py
, zbierz pokrywajce się częściowo zdjęcia (przy użyciu klawisza spacji), a następnie wciśnij klawisz c
, który rozpoczyna proces generowania panoramy. Zwróć uwagę na dokładoność łączenia na krawędziach. Uwaga: Zadanie dopasowywania cech jest bardzo zasobożerne, więc może długo trwać jeśli zostało wykonane wiele zdjęć.